package editorsvg.editor.formas;

import java.awt.geom.Path2D;
import java.awt.geom.Point2D;

/**
 * Nodo perteneciente a un trayecto.
 * @author Jorge Berjano
 */
public class NodoTrayecto {

    private Point2D posicion;
    private Point2D posicionControl1;
    private Point2D posicionControl2;
    private TipoNodo tipo;
    
    public enum TipoNodo {
        INICIAL, RECTA, CURVA, FINAL
    };

     public NodoTrayecto(TipoNodo tipo, Point2D posicion) {
        this.posicion = posicion;
        this.tipo = tipo;
    }
     
    public NodoTrayecto(TipoNodo tipo, Point2D posicion, Point2D posicionControl1, Point2D posicionControl2) {
        this.posicion = posicion;
        this.posicionControl1 = posicionControl1;
        this.posicionControl2 = posicionControl2;
        this.tipo = tipo;
    }

    public Point2D getPosicion() {
        return posicion;
    }

    public void setPosicion(Point2D punto) {
        this.posicion = punto;
    }

    public Point2D getPosicionControl1() {
        return posicionControl1;
    }

    public void setPosicionControl1(Point2D posicionControl1) {
        this.posicionControl1 = posicionControl1;
    }

    public Point2D getPosicionControl2() {
        return posicionControl2;
    }

    public void setPosicionControl2(Point2D posicionControl2) {
        this.posicionControl2 = posicionControl2;
    }

    public TipoNodo getTipo() {
        return tipo;
    }

    public void setTipo(TipoNodo tipo) {
        this.tipo = tipo;
    }

    public void agregarAlPath(Path2D path) {
        if (posicion == null) {
            return;
        }
        switch (tipo) {
            case INICIAL:
                path.moveTo(posicion.getX(), posicion.getY());
                break;
            case RECTA:
                path.lineTo(posicion.getX(), posicion.getY());
                break;
            case CURVA:
                if (posicionControl1 == null) {
                    posicionControl1 = posicion;
                }
                if (posicionControl2 == null) {
                    posicionControl2 = posicion;
                }
                path.curveTo(
                        posicionControl1.getX(), posicionControl1.getY(),
                        posicionControl2.getX(), posicionControl2.getY(),
                        posicion.getX(), posicion.getY());
                break;
            case FINAL:
                path.moveTo(posicion.getX(), posicion.getY());
                path.closePath();
                break;
        }
    }
}
